package tx.service;

import org.springframework.jdbc.core.JdbcTemplate;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import javax.annotation.Resource;
import java.io.IOException;

/**
 * @author jackcfan
 * @date 22/10/11
 */
@Service
public class UserTest1Service {
  @Resource
  JdbcTemplate jdbcTemplate;
  @Resource
  UserTest2Service userTest2Service;

  @Transactional
  public void methodA(){
    // userTest2Service.methodA 抛出了异常，把事务标记为回滚状态，所有数据被回滚
    // 结果：0条数据
    jdbcTemplate.update("insert into user(name,age) values(?,?)","张三1",40);
    try{
      userTest2Service.methodA();
    }catch(Exception e){
      e.printStackTrace();
    }
  }

  @Transactional
  public void methodB() throws IOException {
    // userTest2Service 抛出了 IOException，非 RuntimeException，不会回滚事务
    // 结果：2条数据
    jdbcTemplate.update("insert into user(name,age) values(?,?)","张三2",50);
    userTest2Service.methodB();
  }

  @Transactional
  public void methodC(){
    // userTest2Service 没有加 @Transactional，作为普通方法调用，且异常被catch，也没有对事务状态做修改，不会回滚
    // 结果：2条数据
    jdbcTemplate.update("insert into user(name,age) values(?,?)","张三3",60);
    try{
      userTest2Service.methodC();
    }catch(Exception e){
      e.printStackTrace();
    }
  }
}
